/*
 * Copyright (c) 2019 Author: Fancyears Milos Malvis @1243093366@qq.com
 * ALL COPYRIGHT REVERSED.
 */

package com.fancyears.mq.callback;

import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;

/**
 * @Author: Fancyears Milos Malvis
 * @Date: Created in  2019/5/31 13:26
 * @Modified By:
 */
@Component
public class RabbitMqConfirmCallback implements RabbitTemplate.ConfirmCallback {
    /**
     * CorrelationData 是在发送消息时传入回调方法的参数，可以用于区分消息对象。 CorrelationData对象中只有一个属性 String id。
     * 通过这个参数，我们可以区分当前是发送哪一条消息时的回调，并通过ack参数来进行失败重发功能
     * <p>
     * 不管发送成功与否都会执行这个方法
     * 只有在配置中找不到exchange，ack才会是false
     * 发送数据是exchange为空，或者不填的时候，ack都为true即调用rabbitTemplate.convertAndSend(“”,routingKey,message)或者rabbitTemplate.convertAndSend(routingKey,message)，ack都是true
     *
     * @param correlationData 回调的相关数据.
     * @param ack             true for ack, false for nack
     * @param cause           专门给NACK准备的一个可选的原因，其他情况为null。
     *                             
     */
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        System.out.println("*****************RabbitMqConfirmCallback****************");
        System.out.println("exChange确认" + ack + "   " + cause);
        System.out.println("********************************************************");
    }


}
